package com.hjr.leetcode.question100;

import java.util.Arrays;

/**
 * 6. Z 字形变换
 * 将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
 *
 * 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
 *
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 * 之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："PAHNAPLSIIGYIR"。
 *
 * 请你实现这个将字符串进行指定行数变换的函数：
 *
 * string convert(string s, int numRows);
 */
public class q6 {

    public static void main(String[] args) {
        System.out.println(convert("AB", 1));
    }

    // 14ms 44mb
    public static String convert(String s, int numRows) {
        //通过找规格得知 如果numRows为4 则s的字符行数为1234321234321，需要实现一个循环结构
        //true为正序，false为倒序
        boolean flag = true;
        String[] lines = new String[Math.min(numRows, s.length())];
        Arrays.fill(lines, "");

        int line = 0;
        for (int i = 0; i < s.length(); i++) {
            if (numRows == 1){
                lines[line] += s.charAt(i);
            }else if (flag){
                lines[line++] += String.valueOf(s.charAt(i));
            }else {
                lines[line--] += s.charAt(i);
            }

            if (line == numRows - 1){
                flag = false;
            } else if (line == 0){
                flag = true;
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (String str : lines) {
            stringBuilder.append(str);
        }
        return String.valueOf(stringBuilder);
    }

}
